package praktikum_I.blatt_I.aufgabe2;

import java.util.Collection;

public interface List_inter<E> {

    /**
     * Fuegt elem in die Liste ein. Ist die Liste
     * leer, wird Elem automatisch der Kopf der Liste.
     * Besteht die Liste aus nur einem oder mehreren
     * Elementen, wird Elem an das letzte Element angehaengt
     * @param elem
     */

    public void add(E elem);

    /**
     * Haengt alle Elemente der collection der Reihe nach
     * an die Liste an
     * @param col
     */

    public void addAll(Collection<E> col);

    /**
     *  Fuegt eine uebergebenes Element x als Kopf
     *  in die Liste selbst ein und gibt diese zurueck
     * @param x
     * @return List_inter
     */

    public List_inter cons(E x);

    /**
     * Gibt den Kopf der Liste zurueck
     * @return E
     */

    public E getHead();

    public int size();

    /**
     * Gibt die Laenge der Liste selbst zurueck
     * @return int
     */

    public int length();

    /**
     * Prueft ob die Liste selbst leer ist
     * @return Boolean
     */

    public boolean isEmpty();

    /**
     * Entfernt das erste Element der Liste selbst  und gibt
     * das entfernte Elem zurueck
     * @return
     */

    public Object head();

    /**
     * Fuegt ein uebergebenes Element x an der Position index
     * in der Liste selbst ein
     * @param x  einzufuegendes Element
     * @param index  an dieser Position einfuegen
     * @return List_inter
     */

    public List_inter insert(E x, int index);

    ///////////   ////////////
    //  Zählervariable     //
    ///////////  ///////////

    public int getReferenzenCounter();

    public void clearReferenzenCounter();

    public void addReferenzenCounter();




}
